package de.fhdw.hbs.persistence;

import java.util.ArrayList;

import de.fhdw.hbs.entity.dto.HotelSucheDTO;
import de.fhdw.hbs.entity.pojo.Bewertung;
import de.fhdw.hbs.entity.pojo.Hotel;
import de.fhdw.hbs.entity.pojo.Kunde;
import de.fhdw.hbs.entity.pojo.Reservierung;

/**
 * 
 * @author stephan
 *
 * Interface defining the methods to fetch data from the persistence environment
 */
public interface PersistenceIF {
	/*
	 * Kundensuche
	 */
	/**
	 * Get a Kunde pojo by his id
	 * 
	 * @param id Identifier of a certain customer
	 * @return Kunde pojo
	 */
	public Kunde getKundeById(int id);
	
	/**
	 * 
	 * Get a Kunde pojo by customer email adress
	 * 
	 * @param email Email adress of a certain customer
	 * @return Kunde pojo
	 */
	public Kunde getKundeByEmail(String email);
	
	/*
	 * Hotelsuche
	 */
	/**
	 * Get a hotel by its id
	 * @param id Identifier of a certain Hotel
	 * @return Hotel pojo
	 */
	public Hotel getHotelById(int id);
	/**
	 * List of Hotel Objects based on given criteria
	 * @param kriterien Suchkriterien
	 * @return List of Hotels
	 */
	public ArrayList<Hotel> getHotelByKriterien(HotelSucheDTO kriterien);
	
	/*
	 * Reservierungssuche
	 */
	/**
	 * List of Reservierung objects for a given customer
	 * @param k Kunde pojo
	 * @return List of Reservierungen
	 */
	public ArrayList<Reservierung> getReservierungByKunde(Kunde k);
	/**
	 * List of Reservierung objects for a given Hotel
	 * @param h Hotel pojo
	 * @return List of Reservierungen
	 */
	public ArrayList<Reservierung> getReservierungenByHotel(Hotel h);
		
	
	/*
	 * Erzeugen
	 */
	/**
	 * Add a Kunde
	 * @param k Kunde pojo
	 */
	public void addKunde(Kunde k);
	
	/**
	 * Add a Hotel
	 * @param h Hotel pojo
	 */
	
	public void addHotel(Hotel h);
	/**
	 * Add a Reservierung
	 * @param r Reservierun pojo
	 */
	public void addReservierung(Reservierung r);
}
